package com.foosun.core.util;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

public class JSONUtil {
	
	public static String toJSON(List<?> list) throws Exception{
		StringBuffer str = new StringBuffer("[");
		for(Object obj:list){
			str.append("{");
			toJSON(str,obj.getClass().getSuperclass().getDeclaredFields(),obj);
			toJSON(str,obj.getClass().getDeclaredFields(),obj);
			str = new StringBuffer(str.subSequence(0, str.length()-1));
			str.append("}");
			str.append(",");
		}
		if(!list.isEmpty()){
			str = new StringBuffer(str.subSequence(0, str.length()-1));
		}
		str.append("]");
		return str.toString();
	}
	
	private static void toJSON(StringBuffer str,Field[] fields,Object obj) throws Exception{
		

		for(int i = 0;i < fields.length;i++){
			Field f = fields[i];
			if (Modifier.isStatic(f.getModifiers()) || Modifier.isFinal(f.getModifiers())) {  
                continue;  
            } 
			f.setAccessible(true);
			String filedName = f.getName();
			if(f.getType().equals(String.class)){
				str.append("\"").append(filedName).append("\" : ");
				Object string = f.get(obj);
				if(string != null){
					str.append("\"").append(string).append("\"");
				}else{
					str.append(string);
				}
				str.append(",");
			}else if(f.getType().equals(Integer.class) 
					|| f.getType().equals(Double.class) 
						|| f.getType().equals(Boolean.class)
							||f.getType().equals(Float.class)){
				str.append("\"").append(filedName).append("\" : ");
				str.append(f.get(obj));
				str.append(",");
			}else if(f.getType().equals(Date.class) 
					|| f.getType().equals(Timestamp.class) 
					|| f.getType().equals(java.sql.Date.class)){
				str.append("\"").append(filedName).append("\" : ");
				Object date = f.get(obj);
				if(date!=null){
					str.append("\"").append(DateUtil.toString((Date)date, "yyyy-MM-dd")).append("\"");
				}else{
					str.append(date);
				}
				str.append(",");
			}
			
		}
		
	}
}
